package com.yanxu.threadandobjectmethods.print;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 * @date 2025/3/20-2025
 * @Description:  使用 wait、notify 实现交替打印。
 *      此次虽然实现了交替打印的效果，但是程序是有 bug 的。
 *      运行以后，0-100 的确是交替打印的，但是程序却不能停止。
 *
 *      原因：最后会有一个一个线程一直在  wait 。这样导致程序永远不能停止。
 *      这也是我们使用 wait、notify 十分应该注意的点。
 */
public class TurnsPrintByWaitNotify_HasError {
    static int a=0;
    static Object lock=new Object();

    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                while (a < 100) {
                    synchronized (lock) {
                        System.out.println(Thread.currentThread().getName() + "---" + a);
                        a++;
                        lock.notify();
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        },"偶数线程");

        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                while (a < 100) {
                    synchronized (lock) {
                        System.out.println(Thread.currentThread().getName() + "---" + a);
                        a++;
                        lock.notify();
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        },"奇数线程");

        thread1.start();
        Thread.sleep(200);
        thread2.start();
    }
}